package com.tanklab.signature.common.util;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 生成字符串的哈希值:
 * hash_func: 接受两个参数，一个是要加密的字符串 strText，另一个是加密类型 strType（例如 "SHA-256"）。
 * 步骤:
     * 检查输入字符串是否有效（非空）。
     * 使用 MessageDigest 创建哈希对象，并传入加密类型。
     * 更新哈希对象以包含待加密的字符串字节。
     * 计算哈希值，得到字节数组。
     * 将字节数组转换为十六进制字符串。
     * 返回生成的哈希字符串。
 */
public class HashUtil {
    static public String hash_func(final String strText, final String strType)
    {
        // 返回值
        String strResult = null;

        // 是否是有效字符串
        if (strText != null && strText.length() > 0)
        {
            try
            {
                // SHA 加密开始
                // 创建加密对象 并傳入加密類型
                MessageDigest messageDigest = MessageDigest.getInstance(strType);
                // 传入要加密的字符串
                messageDigest.update(strText.getBytes());
                // 得到 byte 類型结果
                byte byteBuffer[] = messageDigest.digest();

                // 將 byte 轉換爲 string
                StringBuffer strHexString = new StringBuffer();
                // 遍歷 byte buffer
                for (int i = 0; i < byteBuffer.length; i++)
                {
                    String hex = Integer.toHexString(0xff & byteBuffer[i]);
                    if (hex.length() == 1)
                    {
                        strHexString.append('0');
                    }
                    strHexString.append(hex);
                }
                // 得到返回結果
                strResult = strHexString.toString();
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
        }

        return strResult;
    }
}
